﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.EnterpriseServices;
using System.ServiceModel.Web;
using WcfServicioWeb.BusinessEntity;
using WcfServicioWeb.BusinessEntity.Ambiente;
using WcfServicioWeb.BusinessEntity.Tanque;

namespace WcfServicioWeb
{
    [ServiceContract]
    [Description("Interfaz para los metodos expuestos por REST")]
    interface IServicioImplementadorRest
    {

        #region "Metodos a Consumir"

        /// <summary>
        /// EnviarParametroXml via POST recibiendo un parametro
        /// enviado con el formato XML
        /// </summary>
        /// <param name="_idAcceso"></param>
        /// <returns></returns>
        [OperationContract]
        [WebInvoke(
            Method = "POST",
            UriTemplate = "IniciarComunicacion",
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare),
        Description("Envia una lista de parametros con el formato JSON Ejemplo:http://localhost:64662/ServicioImplementador.svc/rest/SolicitarDatosInvernadero.")]
        int IniciarComunicacion(int aplicacion);

        /// <summary>
        /// EnviarParametroXml via POST recibiendo un parametro
        /// enviado con el formato XML
        /// </summary>
        /// <param name="_idAcceso"></param>
        /// <returns></returns>
        [OperationContract]
        [WebInvoke(
            Method = "POST",
            UriTemplate = "SolicitarAbrirCerrarTecho",
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare),
        Description("Envia una lista de parametros con el formato JSON Ejemplo:http://localhost:64662/ServicioImplementador.svc/rest/SolicitarDatosInvernadero.")]
        Luminocidad SolicitarAbrirCerrarTecho(int idInvernadero);

        /// <summary>
        /// EnviarParametroXml via GET recibiendo un parametro
        /// enviado con el formato XML
        /// </summary>
        /// <param name="_idAcceso"></param>
        /// <returns></returns>
        [OperationContract]
        [WebInvoke(
            Method = "POST",
            UriTemplate = "SolicitarRegarConAgua",
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare),
        Description("Envia una lista de parametros con el formato JSON Ejemplo:http://localhost:64662/ServicioImplementador.svc/rest/SolicitarDatosInvernadero.")]
        TanqueAgua SolicitarRegarConAgua(int idInvernadero);

        /// <summary>
        /// EnviarParametroXml via GET recibiendo un parametro
        /// enviado con el formato XML
        /// </summary>
        /// <param name="_idAcceso"></param>
        /// <returns></returns>
        [OperationContract]
        [WebInvoke(
            Method = "POST",
            UriTemplate = "SolicitarRegarConFertilizante",
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare),
        Description("Envia una lista de parametros con el formato JSON Ejemplo:http://localhost:64662/ServicioImplementador.svc/rest/SolicitarDatosInvernadero.")]
        TanqueLiquidoEspecial SolicitarRegarConFertilizante(int idInvernadero);

        /// <summary>
        /// EnviarParametroXml via GET recibiendo un parametro
        /// enviado con el formato XML
        /// </summary>SolicitarAbrirCerrarTecho()
        /// <param name="_idAcceso"></param>
        /// <returns></returns>
        [OperationContract]
        [WebInvoke(
            Method = "POST",
            UriTemplate = "SolicitarDatosInvernadero",
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare),
        Description("Envia una lista de parametros con el formato JSON Ejemplo:http://localhost:64662/ServicioImplementador.svc/rest/SolicitarDatosInvernadero.")]
        Invernadero SolicitarDatosInvernadero(int idInvernadero);

        /// <summary>
        /// EnviarParametroXml via GET recibiendo un parametro
        /// enviado con el formato XML
        /// </summary>
        /// <param name="_idAcceso"></param>
        /// <returns></returns>
        [OperationContract]
        [WebInvoke(
            Method = "POST",
            UriTemplate = "solicitarConfirmacionCliente",
            RequestFormat  = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare),
        Description("Envia una lista de parametros con el formato JSON Ejemplo:http://localhost:64662/ServicioImplementador.svc/rest/solicitarConfirmacionCliente.")]
        Cliente solicitarConfirmacionCliente(Cliente cliente);

        /// <summary>
        /// EnviarParametroJson via POST recibiendo un parametro
        /// del tipo Cliente
        /// enviado con el formato XML
        /// </summary>
        /// <param name="_idAcceso"></param>
        /// <returns></returns>
        [OperationContract]
        [WebInvoke(
            Method = "POST",
            UriTemplate = "solicitarRegistrarCliente",
            RequestFormat  = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare),
        Description("Envia una lista de parametros con el formato JSON Ejemplo:http://localhost:64662/ServicioImplementador.svc/rest/solicitarRegistrarCliente.")]
        String solicitarRegistrarCliente(Cliente cliente);

        /// <summary>
        /// EnviarParametroJSON via POST recibiendo un parametro
        /// del tipo "Cliente"
        /// enviado con el formato JSON
        /// </summary>
        /// <param name="_idAcceso"></param>
        /// <returns></returns>
        [OperationContract]
        [WebInvoke(
            Method = "POST",
            UriTemplate = "solicitarModificarCliente",
            RequestFormat  = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare),
        Description("Envia una lista de parametros con el formato JSON Ejemplo:http://localhost:64662/ServicioImplementador.svc/rest/solicitarModificarCliente.")]
        String solicitarModificarCliente(Cliente cliente);


        #endregion "Metodos a Consumir"

        #region "Envio"

        /// <summary>
        /// ListarParametrosXml via GET con el formato XML
        /// </summary>
        /// <returns></returns>
        [OperationContract]
        [WebInvoke(
            Method = "GET",
            UriTemplate = "ListarParametrosXml",
            RequestFormat = WebMessageFormat.Xml,
            ResponseFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.WrappedRequest),
        Description("formato XML.")]
        List<String> ListarParametrosXml();

        /// <summary>
        /// ListarParametrosJson via GET con el formato JSON
        /// </summary>
        /// <returns></returns>
        [OperationContract]
        [WebInvoke(
            Method = "GET",
            UriTemplate = "ListarParametrosJson",
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.WrappedRequest),
        Description("formato JSON.")]
        List<String> ListarParametrosJson();

        /// <summary>
        /// EnviarParametroXml via GET recibiendo un parametro
        /// enviado con el formato XML
        /// </summary>
        /// <param name="_idAcceso"></param>
        /// <returns></returns>
        [OperationContract]
        [WebInvoke(
            Method = "GET",
            UriTemplate = "EnviarParametroXml/?idAcceso={_idAcceso}",
            RequestFormat = WebMessageFormat.Xml,
            ResponseFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.WrappedRequest),
        Description("Envia una lista de parametros con el formato XML Ejemplo:http://localhost:64662/ServicioImplementador.svc/rest/EnviarParametroXml/?idInspector=2.")]
        String EnviarParametroXml(int _idAcceso);

        /// <summary>
        /// EnviarParametroJson via GET recibiendo un parametro
        /// enviado con el formato JSON
        /// </summary>
        /// <param name="_idAcceso"></param>
        /// <returns></returns>
        [OperationContract]
        [WebInvoke(
            Method = "GET",
            UriTemplate = "EnviarParametroJson/?idAcceso={_idAcceso}",
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.WrappedRequest),
        Description("Envia un parametro con el formato JSON. Ejemplo:http://localhost:64662/ServicioImplementador.svc/rest/EnviarParametroJson/?_idAcceso=2")]
        String EnviarParametroJson(int _idAcceso);

        #endregion "Envio"

        #region "Recepcion"

        /// <summary>
        /// RecepcionParametroXml via POST recibiendo un parametro
        /// recibido con el formato XML
        /// </summary>
        /// <param name="_idAcceso"></param>
        /// <returns></returns>
        [OperationContract]
        [WebInvoke(
            Method = "POST",
            UriTemplate = "RecepcionParametroXml",
            ResponseFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.WrappedRequest),
        Description("Recibe una averia registrada por el inspector en Android y la inserta en 3G en Sql Server. Ejemplo:http://localhost:64662/ServicioImplementador.svc/rest/RecibirAveriasXml/?idInspector=2.")]
        String RecepcionParametroXml(int _idAcceso);

        /// <summary>
        /// RecepcionParametroJson via POST recibiendo un parametro
        /// recibido con el formato JSON
        /// </summary>
        /// <param name="_idAcceso"></param>
        /// <returns></returns>
        [OperationContract]
        [WebInvoke(
            Method = "POST",
            UriTemplate = "RecepcionParametroJson",
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare),
        Description("Recibe una averia registrada por el inspector en Android y la inserta en 3G en Sql Server. Ejemplo:http://localhost:64662/ServicioImplementador.svc/rest/RecibirAveriasJson/?idInspector=2")]
        String ParametroSoap(int _idAcceso);

        #endregion "Recepcion"
    }
}
